package ar.edu.utn.frba.disenio.application.model;

import java.util.List;
import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;
import ar.edu.utn.frba.disenio.fechas.Fecha;
import ar.edu.utn.frba.disenio.model.Asiento;
import ar.edu.utn.frba.disenio.model.Busqueda;
import ar.edu.utn.frba.disenio.model.Lugar;
import ar.edu.utn.frba.disenio.model.Usuario;

@Observable
public class BusquedaModel {
	
	Lugar origen, destino;
	Fecha salida, llegada;
	Busqueda busqueda;
	Usuario usuario;
	Asiento asientoSeleccionado;
	List<Asiento> asientosEncontrados;

	public BusquedaModel(Usuario unUsuario){
		this.usuario = unUsuario;
	}

	public Lugar getOrigen() {
		return origen;
	}

	public void setOrigen(Lugar origen) {
		this.origen = origen;
	}

	public Lugar getDestino() {
		return destino;
	}

	public void setDestino(Lugar destino) {
		this.destino = destino;
	}

	public Fecha getSalida() {
		return salida;
	}

	public void setSalida(Fecha salida) {
		this.salida = salida;
	}

	public Fecha getLlegada() {
		return llegada;
	}

	public void setLlegada(Fecha llegada) {
		this.llegada = llegada;
	}

	public Busqueda getBusqueda() {
		return busqueda;
	}

	public void setBusqueda(Busqueda busqueda) {
		this.busqueda = busqueda;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Asiento getAsientoSeleccionado() {
		return asientoSeleccionado;
	}

	public void setAsientoSeleccionado(Asiento asientoSeleccionado) {
		this.asientoSeleccionado = asientoSeleccionado;
	}
	
	public List<Asiento> getAsientosEncontrados() {
		return asientosEncontrados;
	}

	public void setAsientosEncontrados(List<Asiento> asientosEncontrados) {
		this.asientosEncontrados = asientosEncontrados;
	}

	public void buscar() {
		this.validar();
		this.setBusqueda(new Busqueda(this.origen, this.destino, this.salida, null));
		this.busqueda.buscarVuelos(RepositorioAerolineas.getInstance().getAerolineas(), this.getUsuario());
		this.setAsientosEncontrados(this.busqueda.getTodosLosAsientos());
		if (this.asientosEncontrados.size() == 0) 
			throw new UserException("No se encontraron vuelos.");
	}
	
	private void validar() {
		if (this.origen.equals(null) || this.destino.equals(null) || this.salida.equals(null)){
			throw new UserException("Falto llenar algun campo");
		}
		
	}

	public void comprar(){
		this.getAsientoSeleccionado().comprar(this.getUsuario());
	}
	
	public void reservar(){
		this.getAsientoSeleccionado().reservar(this.getUsuario());
	}
	
	
}
